D5 Pro: chyba TabSheet.OnShow

Otázka od: Viliam Mlich

17. 9. 2002 17:52

- polozte si do Form1 PageControl (Win32)
- do neho pridajte 2 TabSheety (pomocou NewPage z menu na prave tlacitko)
- na ten druhy polozte CombBox (Standard)
- do eventu OnShow pre TabSheet2 dajte:
   ComboBox1.Visible := false;

Pri spusteni by teda kombo malo byt schovane. Ale neni! A pritom to OnShow
sa zavola.

Staci sa na chvilu prepnut na TabSheet1 a nazad a uz to funguje. Len pri
prvom starte sa po OnShow zavola este nieco, co vrati stav z design time. Co
s tym? Potrebujem, aby uz pri prvom spusteni boli vidiet len prvky, ktore
podla situacie v case startu maju byt viditelne. OnMouseMove? Ale co, ked
nema mys?

Vravite Timer? Tudle! Ked to kombo necham kazdu sekundu zhasinat, tak na mna
kasle a svieti! Poslucha jedine, ked to v OnShow zakomentujem. To same
Repaint. To same Invalidate. Idem si hodit maslu. AKO TU SVINU ZHASNEM? Ked
ju zhasnem v design-time, tak ju zase neviem rozsvietit, ak by to nahodou
pri starte bolo potrebne.

BTW minule som tu popisoval chybu, ked sa nezavola ComboBox.OnChange.
Takisto som ju vyvolal izolovane, ale bohuzial som ten pokus hned zmazal.
Takze ked jeden clovek napisal, ze jemu to funguje, chcel som mu poslat
nefungujucu vzorku, ale uz to zacalo fungovat aj u mna. :-O Vysiel som za
idiota, ale v aplikacii sa mi to sprava ako popisujem. Nemam cas to
izolovat, obisiel som to.

Tentokrat nechavam ukazku v archive.

bye
vmlich http://www.rar.cz

Odpovedá: David Michal

17. 9. 2002 18:14

Zdravim,
Reseni neprinasim, ale chybu mohu potvrdit. Ja se pro zmenu snazim
zviditelnit panel pri OnShow jednoho z tabu.
Pokud vsak aplikace nastartuje s PageControl1.ActivePage = "ten muj
tabsheet",
tak mi panel zustane schovany. Pokud aplikace nastartuje s jinym
aktivnim TebSheet pak vse funguje jak ma.
Vyresil jsem to pridanim
If ControlPage1.ActivePage = "ten muj tabsheet" Then Panel1.Visible := True;
do Eventu OnCreate na hlavnim formulari.

David

- polozte si do Form1 PageControl (Win32)
- do neho pridajte 2 TabSheety (pomocou NewPage z menu na prave tlacitko)
- na ten druhy polozte CombBox (Standard)
- do eventu OnShow pre TabSheet2 dajte:
   ComboBox1.Visible := false;

Pri spusteni by teda kombo malo byt schovane. Ale neni! A pritom to OnShow
sa zavola.

Staci sa na chvilu prepnut na TabSheet1 a nazad a uz to funguje. Len pri
prvom starte sa po OnShow zavola este nieco, co vrati stav z design time. Co
s tym?
---
Outgoing mail is certified Virus Free.
Checked by AVG anti-virus system (http://www.grisoft.com).
Version: 6.0.389 / Virus Database: 220 - Release Date: 16/09/2002

Odpovedá: Petr Vones

17. 9. 2002 21:35

From: "Viliam Mlich" <vmlich@mbox.vol.cz>
> Pri spusteni by teda kombo malo byt schovane. Ale neni! A pritom to OnShow
> sa zavola.

Chyba ve VCL. Timhle by to melo jit opravit, ale je otazka jak se to bude
chovat pri slozitejsich konstrukcich:

procedure FixTabSheetShow(Sender: TObject);
begin
  with (Sender as TTabSheet) do
    if PageControl.Visible and not PageControl.Showing then
      ValidParentForm(PageControl).Perform(CM_VISIBLECHANGED, 0, 0);
end;

procedure TForm1.TabSheet2Show(Sender: TObject);
begin
  ComboBox1.Visible := True;
  FixTabSheetShow(Sender);
end;

Petr Vones

Odpovedá: Viliam Mlich

17. 9. 2002 23:20

> Pri spusteni by teda kombo malo byt schovane. Ale neni! A pritom to
OnShow
> sa zavola.

> Reseni neprinasim, ale chybu mohu potvrdit.

Ale prinasas:

> Vyresil jsem to pridanim
> If ControlPage1.ActivePage = "ten muj tabsheet" Then Panel1.Visible :=
True;
> do Eventu OnCreate na hlavnim formulari.

Ja som do Form1.OnCreate dal rovno 'TabSheet2Show(self);' a som happy.
Akurat kdesi vnutri hloda moja podlomena dovera, uz neverim ani tomu, co do
ust nesiem.

Zaujimave, ze najprv sa to vola z Form1Create a to zafunguje a potom sa to
este raz zavola pri skutocnom OnShow, ale to uz je jalove   Keby niekto po
mne chcel, aby som urobil program s podobnym spravanim, asi by som sa
poriadne zapotil...

bye
vmlich

Odpovedá: Viliam Mlich

18. 9. 2002 0:19

Subject: Re: D5 Pro: chyba TabSheet.OnShow
> if PageControl.Visible and not PageControl.Showing then

toto ale opravuje len 'Visible := true' ale keby som nahodou v design-time
mal visible=false a v OnShow ho chcel dat na true, tak to zase nepojde.

Riesenie zda sa je natvrdo mu posielat spravu, ze sa Visible fakt zmenilo:

ComboBox1.Visible := True;
ValidParentForm(TabSheet2.PageControl).Perform(CM_VISIBLECHANGED, 0, 0);

bye
vmlich

Odpovedá: Petr Vones

18. 9. 2002 0:33

From: "Viliam Mlich" <vmlich@mbox.vol.cz>
> toto ale opravuje len 'Visible := true' ale keby som nahodou v design-time
> mal visible=false a v OnShow ho chcel dat na true, tak to zase nepojde.

Visible ceho ? To jen kontroluje, jestli je treba tu chybu vubec opravovat.

Petr Vones